#----------------------------------*-sh-*--------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | www.openfoam.com
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
#     Copyright (C) 2011-2016 OpenFOAM Foundation
#     Copyright (C) 2016-2020 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# File
#     etc/config.sh/unset
#
# Description
#     Clear as many OpenFOAM environment settings as possible
#
#------------------------------------------------------------------------------

# Clean standard environment variables (PATH, LD_LIBRARY_PATH, MANPATH)
foamClean=$WM_PROJECT_DIR/bin/foamCleanPath
[ -f "$foamClean" -a -x "$foamClean" ] || unset foamClean

# The old dirs to be cleaned from the environment variables
foamOldDirs="$WM_PROJECT_DIR $WM_THIRD_PARTY_DIR \
    $HOME/$WM_PROJECT/$USER $FOAM_USER_APPBIN $FOAM_USER_LIBBIN \
    $WM_PROJECT_SITE $FOAM_SITE_APPBIN $FOAM_SITE_LIBBIN \
    $ParaView_DIR $ParaView_MESA_DIR"

#------------------------------------------------------------------------------
# Unset WM_* environment variables

unset WM_ARCH
unset WM_ARCH_OPTION
unset WM_COMPILER
unset WM_COMPILER_TYPE
unset WM_COMPILER_LIB_ARCH
unset WM_COMPILE_OPTION
unset WM_DIR
unset WM_HOSTS
unset WM_LABEL_OPTION
unset WM_LABEL_SIZE
unset WM_MPLIB
unset WM_NCOMPPROCS
unset WM_OPTIONS
unset WM_OSTYPE
unset WM_PRECISION_OPTION
unset WM_PROJECT
unset WM_PROJECT_API
unset WM_PROJECT_DIR
unset WM_PROJECT_INST_DIR
unset WM_PROJECT_SITE
unset WM_PROJECT_USER_DIR
unset WM_PROJECT_VERSION
unset WM_SCHEDULER
unset WM_THIRD_PARTY_DIR

# Older variables

# Before 1906
unset WM_CC WM_CXX WM_CFLAGS WM_CXXFLAGS WM_LDFLAGS

#------------------------------------------------------------------------------
# Unset FOAM_* environment variables

unset FOAM_API
unset FOAM_APPBIN
unset FOAM_APP
unset FOAM_CODE_TEMPLATES
unset FOAM_CONFIG_ETC
unset FOAM_CONFIG_MODE
unset FOAM_ETC
unset FOAM_EXTRA_CFLAGS FOAM_EXTRA_CXXFLAGS FOAM_EXTRA_LDFLAGS
unset FOAM_EXT_LIBBIN
unset FOAM_JOB_DIR
unset FOAM_LIBBIN
unset FOAM_MODULE_APPBIN
unset FOAM_MODULE_LIBBIN
unset FOAM_MODULE_PREFIX
unset FOAM_MPI
unset FOAM_RUN
unset FOAM_SETTINGS
unset FOAM_SIGFPE
unset FOAM_SIGNAN
unset FOAM_SITE_APPBIN
unset FOAM_SITE_LIBBIN
unset FOAM_SOLVERS
unset FOAM_SRC
unset FOAM_TUTORIALS
unset FOAM_USER_APPBIN
unset FOAM_USER_LIBBIN
unset FOAM_UTILITIES

# Old variables

# Before 1812
unset FOAM_INST_DIR

#------------------------------------------------------------------------------
# Unset MPI-related environment variables

unset MPI_ARCH_PATH
unset MPI_BUFFER_SIZE

# Undefine OPAL_PREFIX if set to one of the paths on foamOldDirs
if [ -n "$foamClean" ] && [ -z "$($foamClean -env=OPAL_PREFIX $foamOldDirs)" ]
then
    unset OPAL_PREFIX
fi

#------------------------------------------------------------------------------
# Unset ParaView/VTK-related environment variables

unset ParaView_DIR
unset ParaView_MESA_DIR
unset ParaView_INCLUDE_DIR
unset ParaView_VERSION
unset PV_PLUGIN_PATH
unset VTK_DIR

# Undefine Qt5_DIR if set to one of the paths on foamOldDirs
if [ -n "$foamClean" ] && [ -z "$($foamClean -env=Qt5_DIR $foamOldDirs)" ]
then
    unset Qt5_DIR
fi

#------------------------------------------------------------------------------
# Unset other ThirdParty environment variables

unset ADIOS_ARCH_PATH
unset ADIOS1_ARCH_PATH
unset ADIOS2_ARCH_PATH
unset BOOST_ARCH_PATH
unset CCMIO_ARCH_PATH
unset CGAL_ARCH_PATH
unset FFTW_ARCH_PATH
unset GPERFTOOLS_ARCH_PATH
unset GMP_ARCH_PATH
unset MPFR_ARCH_PATH
unset LLVM_ARCH_PATH
unset MESA_ARCH_PATH
unset KAHIP_ARCH_PATH
unset METIS_ARCH_PATH
unset SCOTCH_ARCH_PATH

#------------------------------------------------------------------------------
# Cleanup environment
# PATH, LD_LIBRARY_PATH, MANPATH

if [ -n "$foamClean" ]
then
    eval "$($foamClean -sh-env=PATH $foamOldDirs)"
    eval "$($foamClean -sh-env=LD_LIBRARY_PATH $foamOldDirs)"
    eval "$($foamClean -sh-env=MANPATH $foamOldDirs)"
fi

[ -n "$LD_LIBRARY_PATH" ] || unset LD_LIBRARY_PATH
[ -n "$MANPATH" ] || unset MANPATH

#------------------------------------------------------------------------------
# Cleanup aliases and functions

unalias wmSet       2>/dev/null
unalias wmInt32     2>/dev/null
unalias wmInt64     2>/dev/null
unalias wmDP        2>/dev/null
unalias wmSP        2>/dev/null
unalias wmSPDP      2>/dev/null

unalias wmUnset     2>/dev/null

unalias wmSchedOn   2>/dev/null
unalias wmSchedOff  2>/dev/null

unalias foam        2>/dev/null

unalias src         2>/dev/null
unalias lib         2>/dev/null
unalias app         2>/dev/null
unalias sol         2>/dev/null
unalias util        2>/dev/null
unalias tut         2>/dev/null
unalias run         2>/dev/null

unalias ufoam       2>/dev/null
unalias uapp        2>/dev/null
unalias usol        2>/dev/null
unalias uutil       2>/dev/null

unset -f wmRefresh  2>/dev/null
unset -f foamPwd    2>/dev/null
unset -f foamVersion 2>/dev/null
unset -f foamPV     2>/dev/null

# NB: no good way to remove foamPwd reference in PS1.


# Remove old completions, which look like
#     "complete ... -F _of_complete_ APPNAME
# For economy, obtain list first
foamOldDirs="$(complete 2>/dev/null | sed -ne 's/^.*-F _of_.* \(..*\)$/\1/p')"
for cleaned in $foamOldDirs
do
    complete -r "$cleaned" 2>/dev/null
done

# Completion functions
unset -f foamAddCompletion 2>/dev/null
unset -f _of_complete_  2>/dev/null

# Completion cache
unset _of_complete_cache_

#------------------------------------------------------------------------------
# Intermediate variables (do as last for a clean exit code)

unset cleaned foamClean foamOldDirs

#------------------------------------------------------------------------------
